[小ネタ]polarsのread_csvで全ての列を文字列型として読み込む方法

[小ネタ]polarsのread_csvで全ての列を文字列型として読み込む方法

Clock Icon2023.11.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

データアナリティクス事業本部のueharaです。

今回は、polarsのread_csvで全ての列を文字列型として読み込む方法をご紹介したいと思います。

結論

read_csvの引数 infer_schema_lengthの値を 0 にすることで、全ての列を文字列型として読み込むことができます。

df = pl.read_csv("data.csv", infer_schema_length=0)

infer_schema_length は「スキーマを推測するために読み取る最大行数」のことです(デフォルトは100)。

infer_schema_length について、polarsの公式ドキュメントには以下の記載があります。

If set to 0, all columns will be read as pl.Utf8.

上記より、 0 を設定すればpl.Utf8、すなわち文字列として読み取れることが分かります。

やってみた

以下のデータとPythonのスクリプトを用意します。

data1,data2,data3
1,1.123,aaa
2,2.234,bbb
3,3.345,ccc
import polars as pl

df = pl.read_csv("data.csv")
print(df.dtypes)

実行結果は次の通りです。

$ python test.py
[Int64, Float64, Utf8]

左から順に整数、浮動小数、文字列として判定されていることが分かります。

では、今度は冒頭で述べた通り infer_schema_length=0 を設定してみます。

import polars as pl

df = pl.read_csv("data.csv", infer_schema_length=0)
print(df.dtypes)

実行結果は次の通りです。

$ python test2.py
[Utf8, Utf8, Utf8]

全て文字列として判定されていることが分かります。

ここで、次のようなデータを用意します。

data1,data2
0,123456789123456789123456789
1,123456789123456789123456789
2,123456789123456789123456789

これを普通に読み込もうとすると、以下のエラーが発生します。

$ python test.py
(省略)
polars.exceptions.ComputeError: Could not parse `123456789123456789123456789` as dtype `i64` at column 'data2' (column number 2).

すなわち、123456789123456789123456789を整数型として判定しているのですが、pl.Int64に収まる値になっていないためエラーが発生しています。

仮にread_csvにて infer_schema_length=0 を設定した場合は、全て文字列として判定されるため、本エラーは発生しません。

$ python test2.py
[Utf8, Utf8]

最後に

今回は、polarsのread_csvで全ての列を文字列型として読み込む方法をご紹介してみました。

参考になりましたら幸いです。

参考文献

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.